import openpyxl
from openpyxl.drawing.image import Image
import requests
from io import BytesIO
from urllib.parse import quote
from openpyxl.utils import get_column_letter


def process_excel(file_path):
    # 加载Excel文件
    wb = openpyxl.load_workbook(file_path)
    ws = wb.active

    # 表头
    headers = [
        '毕业证', '毕业证学信网', '鸿蒙应用开发者', 'ISTQB证书', '计算机程序设计员（JAVA）',
        '全国计算机等级考试（NCRE）证书', 'PDMA认证', 'PMI证书', '软考高级证书',
        '软考中级证书', '腾讯云开发者认证'
    ]

    # 获取列宽度函数
    def get_column_width(ws, col):
        col_letter = get_column_letter(col)
        return ws.column_dimensions[col_letter].width

    # 遍历每一列的表头，检查超链接并替换为图片
    for col_num, header in enumerate(ws[1], 1):
        if header.value in headers:
            for row in range(2, ws.max_row + 1):  # 从第二行开始检查
                cell = ws.cell(row=row, column=col_num)
                if cell.hyperlink:  # 如果单元格有超链接
                    url = cell.hyperlink.target
                    # 兼容旧版本openpyxl
                    if not url:
                        url = cell.hyperlink.url
                    # 处理图片超链接
                    if url.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp')):
                        try:
                            # 打印 URL 用于调试
                            print(f"正在处理图片 URL: {url}")
                            # URL 编码，确保没有特殊字符
                            encoded_url = quote(url, safe=':/')
                            response = requests.get(encoded_url)
                            response.raise_for_status()  # 如果请求失败则抛出异常

                            # 检查是否为图片
                            if "image" in response.headers.get("Content-Type", ""):
                                image = Image(BytesIO(response.content))

                                # 获取单元格所在列的宽度和行高
                                col_width = get_column_width(ws, col_num) * 7  # 乘以一个常数来控制大小
                                row_height = ws.row_dimensions[row].height * 0.75  # 行高单位相对较小，乘以常数

                                image.width = col_width
                                image.height = row_height

                                # 将图片嵌入到单元格中
                                ws.add_image(image, f"{get_column_letter(col_num)}{row}")

                                # 清除原单元格内容
                                cell.value = None
                                cell.hyperlink = None
                            else:
                                print(f"URL 不是图片: {url}")
                                cell.value = "链接访问失败"
                                cell.hyperlink = None
                        except Exception as e:
                            # 如果获取图片失败，设置单元格为“链接访问失败”
                            print(f"图片获取失败: {e}")
                            cell.value = "链接访问失败"
                            cell.hyperlink = None
                    else:
                        cell.value = url  # 不是图片的超链接，直接显示超链接

    # 保存修改后的Excel文件
    wb.save("processed_" + file_path)


# 调用函数处理Excel文件
process_excel("中国银行招标 人员简历名单1_副本.xlsx")
